<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--什么是WebSQL？-->
		<p>WebSQL是随着HTML5规范加入的在浏览器端运行的轻量数据库</p>
		<p>
			Html5数据库API是以一个独立规范形式出现，它包含三个核心方法：
				1、openDatabase：这个方法使用现有数据库或创建新数据库创建数据库对象。
				2、transaction：这个方法允许我们根据情况控制事务提交或回滚。
				3、executeSql：这个方法用于执行真实的SQL查询。
		</p>
		<hr />
		<!--jQuery 的属性拷贝(extend)的实现原理是什么，如何实现深拷贝？-->
			<p>
				原理: 创建一个按钮, 让他每点击一次就创建一个自己, 并且创建出来的按钮也有这个功能(类似于递归)

				实现深度拷贝:
				1.检测当前属性是否为对象
				2.因为数组是特殊的对象，所以，在属性为对象的前提下还需要检测它是否为数组。
				3.如果是数组，则创建一个[]空数组，否则，创建一个{}空对象，并赋值给子对象的当前属性。然后，递归调用extendDeep函数。
			</p>
		
		<hr />
		<!--谈一下Jquery中的bind(),live(),delegate(),on()的区别？-->
		<p>
			<br />.bind()是直接绑定在元素上

			<br />.live()则是通过冒泡的方式来绑定到元素上的。更适合列表类型的，绑定到document DOM节点上。和.bind()的优势是支持动态数据。
			
			<br />.delegate()则是更精确的小范围使用事件代理，性能优于.live()
			
			<br />.on()则是最新的1.9版本整合了之前的三种方式的新事件绑定机制
		</p>
		
		<hr />
		<!--.JQuery一个对象可以同时绑定多个事件，这是如何实现的？-->
			<p>
				$ele.on('eventName', handle1);
				$ele.on('eventName', handle2);
				$ele.on('eventName', handle3);
				其实$ele元素的eventName事件有一个处理函数数组 监听一次就往里面放一个handle， 数组是先进后出型的也就是栈， 然后触发事件的时候一次执行
				
				上面的监听相当于
				
				$ele.eventHandle['eventName'] = [];
				$ele.eventHandle['eventName'].push(handle1);
				$ele.eventHandle['eventName'].push(handle2);
				$ele.eventHandle['eventName'].push(handle3);
				然后$ele.trigger('eventName')触发的时候， 从栈里面取出处理函数执行
				
				while($ele.eventHandle['eventName'].length) {
				    handle = $ele.eventHandle['eventName'].pop();
				    handle();
				}
				最先监听的最后执行
			</p>
		
		<hr />
		<!--Javascript MVC框架有：Ember.js、Backbone.js、Knockout.js、Spine.js、Batman.js 和 Angular.js等。(看看, 不用作答)-->
		
		
		<hr />
		<!--知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优点和缺点么?-->
		KnockoutJS
			优点
				专注于data-binding，UI自动刷新，model依赖跟踪
				简单易上手，学习成本低
				轻量，方便与其他第三方JS框架集成
				可扩展，支持自定义定制
				浏览器兼容度高，几乎支持所有现代浏览器
			不足
				是一个MVVM library，不是一个前端解决方案
				缺少Router等重要模块支持
				缺少可测试性支持
		Angular
			优点：
				1. 模板功能强大丰富，并且是声明式的，自带了丰富的Angular指令；
				2. 是一个比较完善的前端MV*框架，包含模板，数据双向绑定，路由，模块化，服务，过滤器，依赖注入等所有功能；
				3. 自定义Directive，比jQuery插件还灵活，但是需要深入了解Directive的一些特性，简单的封装容易，复杂一点官方没有提供详细的介绍文档，我们可以通过阅读源代码来找到某些我们需要的东西，如：在directive使用 $parse；
				4. ng模块化比较大胆的引入了Java的一些东西（依赖注入），能够很容易的写出可复用的代码，对于敏捷开发的团队来说非常有帮助，我们的项目从上线到目前，UI变化很大，在摸索中迭代产品，但是js的代码基本上很少改动。
				5. 补充：Angular支持单元测试和e2e-testing。
				
			缺点：
				1. 验证功能错误信息显示比较薄弱，需要写很多模板标签，没有jQuery Validate方便，所以我们自己封装了验证的错误信息提示，详细参考 why520crazy/w5c-validator-angular · GitHub ；
				2. ngView只能有一个，不能嵌套多个视图，虽然有 angular-ui/ui-router · GitHub 解决，但是貌似ui-router 对于URL的控制不是很灵活，必须是嵌套式的（也许我没有深入了解或者新版本有改进）；
				3. 对于特别复杂的应用场景，貌似性能有点问题，特别是在Windows下使用chrome浏览器，不知道是内存泄漏了还是什么其他问题，没有找到好的解决方案，奇怪的是在IE10下反而很快，对此还在观察中；
				4. 这次从1.0.X升级到1.2.X，貌似有比较大的调整，没有完美兼容低版本，升级之后可能会导致一个兼容性的BUG，具体详细信息参考官方文档 AngularJS ，对应的中文版本：Angular 1.0到1.2 迁移指南
				5. ng提倡在控制器里面不要有操作DOM的代码，对于一些jQuery 插件的使用，如果想不破坏代码的整洁性，需要写一些directive去封装插件，但是现在有很多插件的版本已经支持Angular了，如：jQuery File Upload Demo
				6. Angular 太笨重了，没有让用户选择一个轻量级的版本，当然1.2.X后，Angular也在做一些更改，比如把route，animate等模块独立出去，让用户自己去选择。
		Backbone
			优点：
				View 的划分将页面上的视图元素解耦，粒度细化。View 间通过事件和 Model 通讯，避免了 DOM 事件的滥用。
				Model 和 Restful 的通讯方式对于后端人员非常友好。
				MVC 架构清晰， 我有个常年写 Java 没写过 JS 的同事看 Backbone 很快就了解了整体设计，虽然这时候他还是不会写 JS。
				Collection/Model 抽象了以前杂乱的 AJAX 请求，CRUD 请求变得非常非常方便。
				强烈建议 View -> Model 单向依赖，世界会美好很多。
				配上一个模块化加载器例如 SeaJS 会很爽。
			缺点：
				Model 层比较简单，如果要支持 One-To-One 或者 One-To-Many 等复杂数据关系时有些力不从心。还有 一个 Model 只能属于一个 Collection 这个设计，页面复杂的时候会很受局限。例如这个问题： http://www.zhihu.com/question/19843899 （补充：Backbone.Relations 插件是这个问题的一个解决方案 https://github.com/PaulUithol/Backbone-relational By zjhiphop）
				同上，Model 只有基本的 CRUD 操作，不能很好的扩展，Backbone.sync 方法写的不太灵活，要想扩展就得重写 sync 方法。
				View 层没有很强的 Page 管理机制，比如通过 URL 切换改变整个页面时，页面上尚存的 View 如何处理？直接销毁的话，是否要销毁关联的 Model、Collection？Cache 住？如何管理 Cache？
				内存管理需要比较小心，缺乏机制避免创建重复 Model。 extends override 父类方法的时候得写一串的 SuperClass.prototype.someMethod.apply 什么的，就不能实现个 _super 方法么…… 对调试非常不友好。
				作者有代码洁癖（也是加分项），this.$el 大家呼唤了这么久才加上，估计今生也看不到 this._super。
				更新慢。
				
				
	</body>
</html>
